package com.chunlin.generic;

public class GenericMethodExample {
    // 定义一个泛型方法，打印数组的所有元素
    //这里，<T> 声明了一个类型参数 T，该类型参数可以用于方法的参数、返回类型或方法体内部。
    public static <T> void printArray(T[] array) {
        for (T e : array) {
            System.out.println(e + " ");
        }
        System.out.println();
    }

    //定义一个泛型方法，返回两个对象中的最大值：
    //这里，<T> 声明了一个类型参数 T，该类型参数可以用于方法的参数、返回类型或方法体内部
    //maximum 方法的类型参数 T 被约束为必须实现 Comparable<T> 接口，这样可以使用 compareTo 方法进行比较
    public static <T extends Comparable<T>> T maxinum(T x, T y) {
        return x.compareTo(y) > 0 ? x : y;
    }

    public static void main(String[] args) {
        Integer[] intArray = new Integer[]{1, 2, 3, 4, 5};
        String[] strArray = new String[] {"Hello", "World"};

        printArray(intArray);
        printArray(strArray);

        //使用Java类型自动推导
        System.out.println(maxinum(1,2));
        System.out.println(maxinum(1.1,0.1));
        System.out.println(maxinum("a", "b"));

        // 不使用类型推导，显式指定类型参数
        System.out.println(GenericMethodExample.<Integer>maxinum(1,2));
        System.out.println(GenericMethodExample.<Double>maxinum(0.1, -2.0));
        System.out.println(GenericMethodExample.<String>maxinum("c", "ab"));
    }
}
